﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Web;

namespace BaseWebApi.Common
{
    /// <summary>
    /// 打印帮助类
    /// </summary>
    public class PrintHelper
    {
        /// <summary>
        /// 二维码图像打印
        /// </summary>
        /// <param name="base64QRCode"></param>
        public static void PrintQRCodeImage(string base64QRCode)
        {
            // 使用Windows打印 
            // 创建一个PrintDocument对象  
            try
            {
                // 将Base64字符串解码为字节数组
                string base64String = base64QRCode.Contains(",") ? base64QRCode.Split(',')[1] : base64QRCode;
                byte[] qrCodeBytes = Convert.FromBase64String(base64String);

                // 使用字节数组创建图像对象
                using (Image qrCodeImage = Image.FromStream(new MemoryStream(qrCodeBytes)))
                {
                    // 创建一个PrintDocument对象
                    using (PrintDocument printDoc = new PrintDocument())
                    {
                        // 设置PrintPage事件处理程序
                        printDoc.PrintPage += (sender, e) =>
                        {
                            // 设置打印边距（可选）
                            Rectangle marginBounds = e.MarginBounds;
                            float x = marginBounds.Left + (marginBounds.Width - qrCodeImage.Width) / 2;
                            float y = marginBounds.Top + (marginBounds.Height - qrCodeImage.Height) / 2;

                            // 在打印页面上绘制二维码图像
                            e.Graphics.DrawImage(qrCodeImage, x, y, qrCodeImage.Width, qrCodeImage.Height);

                            // 如果没有更多页面要打印，则设置HasMorePages为false
                            e.HasMorePages = false;
                        };

                        // 发送打印任务到默认打印机
                        printDoc.Print();
                    }
                }
            }
            catch (Exception ex)
            {
                // 处理异常，例如日志记录或显示错误消息
                Console.WriteLine("打印二维码时发生错误: " + ex.Message);
            }
        }
    }
}